package sv.ues.fia.activities;


import sv.ues.fia.R;
import sv.ues.fia.bdcontrol.ControlBDHelper;
import sv.ues.fia.entity.Asistencia;
import sv.ues.fia.fragmentcontrol.MyFragmentPagerAdapter;
import sv.ues.fia.fragmentcontrol.AsistenciaFragment;
import sv.ues.fia.session.UsuarioActual;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Toast;
import android.widget.AdapterView.AdapterContextMenuInfo;

public class AsistenciaActivity extends FragmentActivity {
	/** Definir todos los objetos EN EL FRAGMENT **/
	AsistenciaFragment fragmentPageOne;
	AsistenciaFragment fragmentPageTwo;
	ControlBDHelper bdHelper;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tab_pager);

		bdHelper = new ControlBDHelper(this);
		
		ViewPager pager = (ViewPager) findViewById(R.id.pager);
		
		FragmentManager fMananger = getSupportFragmentManager();
		
		/** Se crean dos instancias del mismo Fragment una por cada pagina **/
		fragmentPageOne = new AsistenciaFragment();
		fragmentPageTwo = new AsistenciaFragment();
		/** Obtener los titulos de pagina del Res->String para manejar idiomas **/
		String titlePageOne = getResources().getString(R.string.page_insert);
		String titlePageTwo = getResources().getString(R.string.page_search);

		MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(
				fMananger, fragmentPageOne, fragmentPageTwo, titlePageOne,
				titlePageTwo);
		
		pager.setAdapter(pagerAdapter);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.general_options, menu);
		return true;

	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo info) {
		super.onCreateContextMenu(menu, v, info);
		
		MenuInflater inflater = this.getMenuInflater();
		inflater.inflate(R.menu.contextual_options, menu);

	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {

		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
				.getMenuInfo();
		final int position = info.position; 
		
		switch (item.getItemId()) {
		
		/** AQUI SE EJECUTAN LAS ACCINES PARA IR A LA INTERFAZ DE MODIFICAR**/
		case R.id.action_menu_update:
			
			Intent intent = new Intent();
			intent.setClass(this, AsistenciaUpdateActivity.class);			
			startActivity(intent);
			
			/** Obtener Objeto Perfil seleccionado para recuperarlo en UpdateActivity **/
			UsuarioActual.setOBJECT( fragmentPageTwo.listResultAsistencia.get(info.position) );
			
			/** Se borran las listas usadas para mostrar los resultados de la busqueda **/
			fragmentPageTwo.listItemsResult.clear();			
			fragmentPageTwo.adapter.notifyDataSetChanged();
			return true;
		
		/** AQUI SE EJECUTAN LAS ACCINES BORRAR UN REGISTRO, SE MUESTRA UN DIALOG DE CONFIRMACION**/
		case R.id.action_menu_delete:

			//Dialog de confirmacion de eliminaci�n de registro
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
			builder.setMessage(this.getString(R.string.deleteConfirm))
					.setCancelable(false)
					.setPositiveButton(android.R.string.ok,
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int id) {
									//Mas abajo se OVERRIDE la accion del SI
								}
							})
					.setNegativeButton(android.R.string.cancel,
							new DialogInterface.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int id) {
									dialog.cancel(); // Cerra dialog y cancelar eliminacion
								}
							});
			
			
			final AlertDialog alert = builder.create();
			alert.show();
			
			// Al darle al boton SI entoncs se elimina el registro
			alert.getButton(Dialog.BUTTON_POSITIVE).setOnClickListener(
		            new View.OnClickListener() {

		                @Override
		                public void onClick(View v) {


							/** LO QUE SE DEBE HACER PARA ELIMINAR **/
		                	//Se obtiene el listResultPerfiles que es la lista del resultado de la busqueda
		                	//con esta lista se puede ubicar el Objeto Perfil a eliminar
		                	//position indica la posicion del elemento a borrar
							Asistencia deleteAsistencia= fragmentPageTwo.listResultAsistencia.get(position);									
							
							bdHelper.abrir();
							//se borra y se captura el mensaje de una vez en el TOAST
							Toast.makeText(AsistenciaActivity.this, bdHelper.eliminarAsistencia(deleteAsistencia),
									Toast.LENGTH_LONG).show();
							bdHelper.cerrar();
							
							//Tambien se Elimina el elemento de las listas de la busqueda
							fragmentPageTwo.listItemsResult.remove(position);
							fragmentPageTwo.listResultAsistencia.remove(position);
							fragmentPageTwo.adapter.notifyDataSetChanged(); // Actualizar el ListView
		                    alert.dismiss();
		                    
		                    
		                }
		            });

			return true;
		default:
			return super.onContextItemSelected(item);
		}

	}

	/** Metodo controlador de acciones del menu general **/
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Intent intent;
		switch (item.getItemId()) {
		case R.id.action_close_session:
			intent = new Intent(this, LoginActivity.class);
			this.finish();
			this.startActivity(intent);
			break;
		case R.id.action_exit_app:
			this.finish();
			break;
		case R.id.action_to_home:
			intent = new Intent(this, HomeActivity.class);
			this.finish();
			this.startActivity(intent);
			break;
		default:
			break;
		}

		return super.onContextItemSelected(item);
	}

}
